/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.com.entities;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.PostLoad;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author dloaiza
 */
@Entity
@Table(name = "TAB_USUARIO")
@NamedQueries({
    @NamedQuery(name = "Usuario.findAll", query = "SELECT u FROM Usuario u")})
public class Usuario implements Serializable {
    @JoinColumn(name = "CDROL", referencedColumnName = "CDROL")
    @ManyToOne(fetch = FetchType.LAZY)
    private Roles cdrol;
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "NMDOCUMENTO", nullable = false, length = 20)
    private String nmdocumento;
    @Column(name = "DSNOMBRES", length = 130)
    private String dsnombres;
    @Column(name = "DSAPELLIDO1", length = 50)
    private String dsapellido1;
    @Column(name = "DSAPELLIDO2", length = 50)
    private String dsapellido2;
    @Column(name = "DSTELEFONO_FIJO", length = 10)
    private String dstelefonoFijo;
    @Column(name = "DSTELEFONO_CELULAR", length = 15)
    private String dstelefonoCelular;
    @Column(name = "FEFEHCHA_NACIMIENTO")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fefehchaNacimiento;
    @Column(name = "DSCORREO", length = 250)
    private String dscorreo;
    @Column(name = "DSCONTRASENA", length = 110)
    private String dscontrasena;
    @JoinColumn(name = "NMID_UNIVERSIDAD", referencedColumnName = "NMID_UNIVERSIDAD")
    @ManyToOne(fetch = FetchType.LAZY)
    private Universidad nmidUniversidad;
    @JoinColumn(name = "DSID_TIPO_DOCUMENTO", referencedColumnName = "ID_TIPO_DOCUMENTO")
    @ManyToOne(fetch = FetchType.LAZY)
    private TipoDocumento dsidTipoDocumento;
    @JoinColumn(name = "DSID_EMPRESA", referencedColumnName = "DSNIT")
    @ManyToOne(fetch = FetchType.LAZY)
    private Empresa dsidEmpresa;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "usuario", fetch = FetchType.LAZY)
    private List<Descubridor> descubridorList;

    public Usuario() {
    }

    public Usuario(String nmdocumento) {
        this.nmdocumento = nmdocumento;
    }

    public String getNmdocumento() {
        return nmdocumento;
    }

    public void setNmdocumento(String nmdocumento) {
        this.nmdocumento = nmdocumento;
    }

    public String getDsnombres() {
        return dsnombres;
    }

    public void setDsnombres(String dsnombres) {
        this.dsnombres = dsnombres;
    }

    public String getDsapellido1() {
        return dsapellido1;
    }

    public void setDsapellido1(String dsapellido1) {
        this.dsapellido1 = dsapellido1;
    }

    public String getDsapellido2() {
        return dsapellido2;
    }

    public void setDsapellido2(String dsapellido2) {
        this.dsapellido2 = dsapellido2;
    }

    public String getDstelefonoFijo() {
        return dstelefonoFijo;
    }

    public void setDstelefonoFijo(String dstelefonoFijo) {
        this.dstelefonoFijo = dstelefonoFijo;
    }

    public String getDstelefonoCelular() {
        return dstelefonoCelular;
    }

    public void setDstelefonoCelular(String dstelefonoCelular) {
        this.dstelefonoCelular = dstelefonoCelular;
    }

    public Date getFefehchaNacimiento() {
        return fefehchaNacimiento;
    }

    public void setFefehchaNacimiento(Date fefehchaNacimiento) {
        this.fefehchaNacimiento = fefehchaNacimiento;
    }

    public String getDscorreo() {
        return dscorreo;
    }

    public void setDscorreo(String dscorreo) {
        this.dscorreo = dscorreo;
    }

    public String getDscontrasena() {
        return dscontrasena;
    }

    public void setDscontrasena(String dscontrasena) {
        this.dscontrasena = dscontrasena;
    }

    public Universidad getNmidUniversidad() {
        return nmidUniversidad;
    }

    public void setNmidUniversidad(Universidad nmidUniversidad) {
        this.nmidUniversidad = nmidUniversidad;
    }

    public TipoDocumento getDsidTipoDocumento() {
        return dsidTipoDocumento;
    }

    public void setDsidTipoDocumento(TipoDocumento dsidTipoDocumento) {
        this.dsidTipoDocumento = dsidTipoDocumento;
    }

    public Empresa getDsidEmpresa() {
        return dsidEmpresa;
    }

    public void setDsidEmpresa(Empresa dsidEmpresa) {
        this.dsidEmpresa = dsidEmpresa;
    }

    public List<Descubridor> getDescubridorList() {
        return descubridorList;
    }

    public void setDescubridorList(List<Descubridor> descubridorList) {
        this.descubridorList = descubridorList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (nmdocumento != null ? nmdocumento.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Usuario)) {
            return false;
        }
        Usuario other = (Usuario) object;
        if ((this.nmdocumento == null && other.nmdocumento != null) || (this.nmdocumento != null && !this.nmdocumento.equals(other.nmdocumento))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "co.com.alexstarkbd.jpa.entities.Usuario[ nmdocumento=" + nmdocumento + " ]";
    }
    
    @PostLoad
    public void fixIt(){
        this.descubridorList = new ArrayList<Descubridor>(this.descubridorList);
    }

    public Roles getCdrol() {
        return cdrol;
    }

    public void setCdrol(Roles cdrol) {
        this.cdrol = cdrol;
    }
}
